package cn.calin.day05.demo34Iterator;

import java.nio.channels.OverlappingFileLockException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/*
    迭代器：是通用的取出集合中元素的方式。
    Iterator接口：迭代器（对集合进行遍历）
    俩个常用方法
        boolean hasNext()如果仍有元素可以迭代，则返回true。
                判断集合中还有没有下一个元素，有就返回true没有就返回false
        E next()返回迭代下一个元素。
            取出集合中下一个元素
    Iterator迭代器，是一个接口，我们无法直接使用，需要使用Iterator接口实现类对象，获取实现类方法比较特殊
        Iterator<E> iterator()
            返回在此 collection 的元素上进行迭代的迭代器

            迭代器的使用步骤（重点）:
                1.使用集合中的方法iterator()获取迭代器的实现类对象，使用Iterator接口接收（多态）
                2.使用Iterator接口中的方法hasNext判断还有没有下一个元素
                3.使用Iterator接口中的方法next取出集合中下一个元素



 */
public class Demo01Iterator {
    public static void main(String[] args) {
        //创建一个集合对象
        Collection<String> coll=new ArrayList<>();
        //往集合中添加元素
        coll.add("姚明");
        coll.add("科比");
        coll.add("麦迪");
        coll.add("詹姆斯");
        coll.add("艾弗森");
        /*
             1.使用集合中的方法iterator()获取迭代器的实现类对象，使用Iterator接口接收（多态）
             注意：
                Iterator<E>接口也是有泛型的，迭代器的泛型跟着集合走，集合扫码泛型，迭代器就是什么泛型
         */
        //多态  接口           实现类对象
        Iterator<String> it=coll.iterator();

        //2.使用Iterator接口中的方法hasNext判断还有没有下一个元素
        /*boolean b= it.hasNext();
        System.out.println(b);//true
        String s= it.next();
        System.out.println(s);//姚明

        b=it.hasNext();
        System.out.println(b);//true
        s= it.next();
        System.out.println(s);//科比

        b=it.hasNext();
        System.out.println(b);//true
        s= it.next();
        System.out.println(s);//麦迪

        b=it.hasNext();
        System.out.println(b);//true
        s= it.next();
        System.out.println(s);//詹姆斯

        b=it.hasNext();
        System.out.println(b);//true
        s= it.next();
        System.out.println(s);//艾弗森

        b=it.hasNext();
        System.out.println(b);//false
        s= it.next();//没有元素，再取出元素会抛出NoSuchElementException没有元素异常
        System.out.println(s);*/

        /*
            发现迭代器取出集合中的元素代码是一个重复的过程
            所以可以使用循环优化
            不知道集合中有多少元素，使用while循环
            循环结束的条件，hasNext方法返回false
         */


        while (it.hasNext())
        {
            String e= it.next();
            System.out.println(e);
        }
        System.out.println("========================");

        for(Iterator<String> it2 = coll.iterator();it2.hasNext();){
            String e=it2.next();
            System.out.println(e);

        }







    }



}
